package br.com.locasis.entity;

// Generated 24/05/2012 20:14:44 by Hibernate Tools 3.4.0.CR1

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

import org.hibernate.validator.Email;
import org.hibernate.validator.Length;
import org.hibernate.validator.NotNull;

import br.com.locasis.utilitarios.UtilString;

/**
 * Cliente generated by hbm2java
 */
@SuppressWarnings("unused")
@Entity
@Table(name = "cliente")
public class Cliente implements java.io.Serializable {

	private static final long serialVersionUID = 1738753508823043371L;

	private Integer idCliente;
	private Pais pais;
	private String nome;
	private String email;
	private String cpf;
	private String rg;
	private String rgUf;
	private String rgOrgaoExpedidor;
	private String passaporte;
	private String habilitacao;
	private Date habilitacaoValidade;
	private Date habilitacaoEmissao;
	private String endereco;
	private String siglaUf;
	private String municipio;
	private String bairro;
	private String cep;
	private String telefone;
	private String celular;
	private String profissao;
	private String empresa;
	private String cargo;
	private String enderecoTransito;
	private String referenciaPessoal;
	private String referenciaPessoalTelefone;
	private String referenciaComercial;
	private String referenciaComercialTelefone;
	private String nroCartaoGold;
	private boolean flgAtivo;
	private Date dataNascimento;
	private String nacionalidade;
	private String estadoCivil;
	private String fotoUrl;
	private String fotoNome;
	// FIXME - ESTE CAMPO AINDA NAO EXISTE NO BANCO AINDA, ESTA VERIFICANDO PELO TAMANHO DO CAMPO
	private Integer tipoCliente;

	private Set<Cartao> cartoes = new HashSet<Cartao>(0);
	private Set<Aluguel> aluguels = new HashSet<Aluguel>(0);

	private boolean selecionado;

	public Cliente() {
	}

	public Cliente(Pais pais) {
		this.pais = pais;
	}

	public Cliente(Integer idCliente, Pais pais, String nome, String habilitacao, Date habilitacaoValidade, Date habilitacaoEmissao, String endereco, String telefone, String profissao) {
		this.idCliente = idCliente;
		this.pais = pais;
		this.nome = nome;
		this.habilitacao = habilitacao;
		this.habilitacaoValidade = habilitacaoValidade;
		this.habilitacaoEmissao = habilitacaoEmissao;
		this.endereco = endereco;
		this.telefone = telefone;
		this.profissao = profissao;
	}

	public Cliente(Integer idCliente, Pais pais, String nome, String cpf, String rg, String rgUf, String rgOrgaoExpedidor, String passaporte, String habilitacao, Date habilitacaoValidade, Date habilitacaoEmissao, String endereco, String siglaUf, String municipio, String bairro, String cep, String telefone, String celular, String profissao, String empresa, String cargo, String enderecoTransito, String referenciaPessoal, String referenciaPessoalTelefone, String referenciaComercial, String referenciaComercialTelefone, String nroCartaoGold, Set<Aluguel> aluguels) {
		this.idCliente = idCliente;
		this.pais = pais;
		this.nome = nome;
		this.cpf = cpf;
		this.rg = rg;
		this.rgUf = rgUf;
		this.rgOrgaoExpedidor = rgOrgaoExpedidor;
		this.passaporte = passaporte;
		this.habilitacao = habilitacao;
		this.habilitacaoValidade = habilitacaoValidade;
		this.habilitacaoEmissao = habilitacaoEmissao;
		this.endereco = endereco;
		this.siglaUf = siglaUf;
		this.municipio = municipio;
		this.bairro = bairro;
		this.cep = cep;
		this.telefone = telefone;
		this.celular = celular;
		this.profissao = profissao;
		this.empresa = empresa;
		this.cargo = cargo;
		this.enderecoTransito = enderecoTransito;
		this.referenciaPessoal = referenciaPessoal;
		this.referenciaPessoalTelefone = referenciaPessoalTelefone;
		this.referenciaComercial = referenciaComercial;
		this.referenciaComercialTelefone = referenciaComercialTelefone;
		this.nroCartaoGold = nroCartaoGold;
		this.aluguels = aluguels;
	}

	@Id
	@Column(name = "id_cliente", unique = true, nullable = false)
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	public Integer getIdCliente() {
		return this.idCliente;
	}

	public void setIdCliente(Integer idCliente) {
		this.idCliente = idCliente;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_pais", nullable = false)
	@NotNull
	public Pais getPais() {
		return this.pais;
	}

	public void setPais(Pais pais) {
		this.pais = pais;
	}

	@Column(name = "nome", nullable = false, length = 80)
	@NotNull
	@Length(max = 80)
	public String getNome() {
		return this.nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	@Email(message = "Campo email inválido")
	@Column(name = "email", length = 100)
	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	@Column(name = "cpf", length = 14)
	@Length(max = 14)
	public String getCpf() {
		return this.cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	@Column(name = "rg", length = 20)
	@Length(max = 20)
	public String getRg() {
		return this.rg;
	}

	public void setRg(String rg) {
		this.rg = rg;
	}

	@Column(name = "rg_uf", length = 2)
	@Length(max = 2)
	public String getRgUf() {
		return this.rgUf;
	}

	public void setRgUf(String rgUf) {
		this.rgUf = rgUf;
	}

	@Column(name = "rg_orgao_expedidor", length = 20)
	@Length(max = 20)
	public String getRgOrgaoExpedidor() {
		return this.rgOrgaoExpedidor;
	}

	public void setRgOrgaoExpedidor(String rgOrgaoExpedidor) {
		this.rgOrgaoExpedidor = rgOrgaoExpedidor;
	}

	@Column(name = "passaporte", length = 20)
	@Length(max = 20)
	public String getPassaporte() {
		return this.passaporte;
	}

	public void setPassaporte(String passaporte) {
		this.passaporte = passaporte;
	}

	@Column(name = "habilitacao", nullable = true, length = 11)
	@Length(max = 11)
	public String getHabilitacao() {
		return this.habilitacao;
	}

	public void setHabilitacao(String habilitacao) {
		this.habilitacao = habilitacao;
	}

	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "habilitacao_validade", nullable = true, length = 29)
	public Date getHabilitacaoValidade() {
		return this.habilitacaoValidade;
	}

	public void setHabilitacaoValidade(Date habilitacaoValidade) {
		this.habilitacaoValidade = habilitacaoValidade;
	}

	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "habilitacao_emissao", nullable = true, length = 29)
	public Date getHabilitacaoEmissao() {
		return this.habilitacaoEmissao;
	}

	public void setHabilitacaoEmissao(Date habilitacaoEmissao) {
		this.habilitacaoEmissao = habilitacaoEmissao;
	}

	@Column(name = "endereco", nullable = false, length = 100)
	@NotNull
	@Length(max = 100)
	public String getEndereco() {
		return this.endereco;
	}

	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}

	@Column(name = "sigla_uf", length = 2)
	@Length(max = 2)
	public String getSiglaUf() {
		return this.siglaUf;
	}

	public void setSiglaUf(String siglaUf) {
		this.siglaUf = siglaUf;
	}

	@Column(name = "municipio", length = 100)
	@Length(max = 100)
	public String getMunicipio() {
		return this.municipio;
	}

	public void setMunicipio(String municipio) {
		this.municipio = municipio;
	}

	@Column(name = "bairro", length = 100)
	@Length(max = 100)
	public String getBairro() {
		return this.bairro;
	}

	public void setBairro(String bairro) {
		this.bairro = bairro;
	}

	@Column(name = "cep", length = 10)
	@Length(max = 10)
	public String getCep() {
		return this.cep;
	}

	public void setCep(String cep) {
		this.cep = cep;
	}

	@Column(name = "telefone", nullable = false, length = 14)
	@NotNull
	@Length(max = 14)
	public String getTelefone() {
		return this.telefone;
	}

	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}

	@Column(name = "celular", length = 14)
	@Length(max = 14)
	public String getCelular() {
		return this.celular;
	}

	public void setCelular(String celular) {
		this.celular = celular;
	}

	@Column(name = "profissao", nullable = false, length = 80)
	@NotNull
	@Length(max = 80)
	public String getProfissao() {
		return this.profissao;
	}

	public void setProfissao(String profissao) {
		this.profissao = profissao;
	}

	@Column(name = "empresa", length = 100)
	@Length(max = 100)
	public String getEmpresa() {
		return this.empresa;
	}

	public void setEmpresa(String empresa) {
		this.empresa = empresa;
	}

	@Column(name = "cargo", length = 80)
	@Length(max = 80)
	public String getCargo() {
		return this.cargo;
	}

	public void setCargo(String cargo) {
		this.cargo = cargo;
	}

	@Column(name = "endereco_transito", length = 200)
	@Length(max = 200)
	public String getEnderecoTransito() {
		return this.enderecoTransito;
	}

	public void setEnderecoTransito(String enderecoTransito) {
		this.enderecoTransito = enderecoTransito;
	}

	@Column(name = "referencia_pessoal", length = 100)
	@Length(max = 100)
	public String getReferenciaPessoal() {
		return this.referenciaPessoal;
	}

	public void setReferenciaPessoal(String referenciaPessoal) {
		this.referenciaPessoal = referenciaPessoal;
	}

	@Column(name = "referencia_pessoal_telefone", length = 14)
	@Length(max = 14)
	public String getReferenciaPessoalTelefone() {
		return this.referenciaPessoalTelefone;
	}

	public void setReferenciaPessoalTelefone(String referenciaPessoalTelefone) {
		this.referenciaPessoalTelefone = referenciaPessoalTelefone;
	}

	@Column(name = "referencia_comercial", length = 100)
	@Length(max = 100)
	public String getReferenciaComercial() {
		return this.referenciaComercial;
	}

	public void setReferenciaComercial(String referenciaComercial) {
		this.referenciaComercial = referenciaComercial;
	}

	@Column(name = "referencia_comercial_telefone", length = 14)
	@Length(max = 14)
	public String getReferenciaComercialTelefone() {
		return this.referenciaComercialTelefone;
	}

	public void setReferenciaComercialTelefone(String referenciaComercialTelefone) {
		this.referenciaComercialTelefone = referenciaComercialTelefone;
	}

	@Column(name = "nro_cartao_gold", length = 30)
	@Length(max = 30)
	public String getNroCartaoGold() {
		return this.nroCartaoGold;
	}

	public void setNroCartaoGold(String nroCartaoGold) {
		this.nroCartaoGold = nroCartaoGold;
	}

	@Column(name = "flg_ativo", nullable = false)
	public boolean isFlgAtivo() {
		return flgAtivo;
	}

	public void setFlgAtivo(boolean flgAtivo) {
		this.flgAtivo = flgAtivo;
	}

	@Temporal(TemporalType.DATE)
	@Column(name = "data_nascimento", nullable = true)
	public Date getDataNascimento() {
		return dataNascimento;
	}

	public void setDataNascimento(Date dataNascimento) {
		this.dataNascimento = dataNascimento;
	}

	@Column(name = "nacionalidade", nullable = true, length = 30)
	public String getNacionalidade() {
		return nacionalidade;
	}

	public void setNacionalidade(String nacionalidade) {
		this.nacionalidade = nacionalidade;
	}

	@Column(name = "estado_civil", nullable = true, length = 30)
	public String getEstadoCivil() {
		return estadoCivil;
	}

	public void setEstadoCivil(String estadoCivil) {
		this.estadoCivil = estadoCivil;
	}

	@Column(name = "foto_url", nullable = true, length = 200)
	public String getFotoUrl() {
		return fotoUrl;
	}

	public void setFotoUrl(String fotoUrl) {
		this.fotoUrl = fotoUrl;
	}

	@Column(name = "foto_nome", nullable = true, length = 100)
	public String getFotoNome() {
		return fotoNome;
	}

	public void setFotoNome(String fotoNome) {
		this.fotoNome = fotoNome;
	}

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "cliente")
	public Set<Aluguel> getAluguels() {
		return this.aluguels;
	}

	public void setAluguels(Set<Aluguel> aluguels) {
		this.aluguels = aluguels;
	}

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "cliente")
	public Set<Cartao> getCartoes() {
		return this.cartoes;
	}

	public void setCartoes(Set<Cartao> cartoes) {
		this.cartoes = cartoes;
	}

	@Transient
	public boolean isSelecionado() {
		return selecionado;
	}

	@Transient
	public void setSelecionado(boolean selecionado) {
		this.selecionado = selecionado;
	}

	/*
	 * recuperar do banco de dados essa informação
	 */
	@Transient
	public Integer getTipoCliente() {
		if (this.getCpf() != null && this.getCpf().length() == 11) {
			return 1;
		} else if (this.getCpf() != null && this.getCpf().length() == 14) {
			return 2;
		} else {
			return 0;
		}
	}

	@Transient
	public void setTipoCliente(Integer tipoCliente) {
		this.tipoCliente = tipoCliente;
	}

	@Transient
	public String getCpfFormatado() {
		if (this.getTipoCliente() != null && this.getTipoCliente() == 1) {
			return UtilString.getInstance().formatarCPF(this.cpf);
		}
		return null;
	}

	@Transient
	public String getCnpjFormatado() {
		if (this.getTipoCliente() != null && this.getTipoCliente() == 2) {
			return UtilString.getInstance().formatarCNPJ(this.cpf);
		}
		return null;
	}

}
